home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Muzyka / Edytory sampli (probek dzwieku) / ZynAddSubFX_2.2.0 / Setup_ZynAddSubFX-2.2.0.exe / source code / UI / BankUI.fl < prev    next >
Text File  |  2005-03-14  |  11KB  |  353 lines

  1. # data file for the Fltk User Interface Designer (fluid)
  2. version 1.0104 
  3. header_name {.h} 
  4. code_name {.cc}
  5. decl {//Copyright (c) 2002-2005 Nasca Octavian Paul} {} 
  6.  
  7. decl {//License: GNU GPL version 2} {} 
  8.  
  9. decl {\#include <stdlib.h>} {public
  10.  
  11. decl {\#include <stdio.h>} {public
  12.  
  13. decl {\#include <string.h>} {public
  14.  
  15. decl {\#include <FL/Fl_Button.H>} {public
  16.  
  17. decl {\#include <FL/Fl_File_Chooser.H>} {public
  18.  
  19. decl {\#include "../Misc/Master.h"} {public
  20.  
  21. decl {\#include "../Misc/Bank.h"} {public
  22.  
  23. decl {\#include "../Misc/Config.h"} {public
  24.  
  25. class BankProcess_ {} {
  26.   Function {process()} {open return_type {virtual void}
  27.   } {}
  28.   decl {Bank *bank;} {public
  29.   }
  30.  
  31. class BankSlot {: {public Fl_Button,BankProcess_}
  32. } {
  33.   Function {BankSlot(int x,int y, int w, int h, const char *label=0):Fl_Button(x,y,w,h,label)} {} {
  34.     code {what=NULL;
  35. whatslot=NULL;
  36. nslot=0;
  37. nselected=NULL;} {}
  38.   }
  39.   Function {handle(int event)} {return_type int
  40.   } {
  41.     code {if (what==NULL) return(0);
  42. if (Fl::event_inside(this)){
  43.   *what=0;*whatslot=nslot;
  44.   if ((event==FL_RELEASE)&&(Fl::event_button()==1))*what=1;
  45.   if ((event==FL_RELEASE)&&(Fl::event_button()==3))*what=2;
  46.   if (event==FL_PUSH) highlight=1;
  47. }else highlight=0;
  48.  
  49. int tmp=Fl_Button::handle(event);
  50. if ((*what!=0) && Fl::event_inside(this)) (bp->*fnc)();
  51. return(tmp);} {}
  52.   }
  53.   Function {init(int nslot_, int *what_, int *whatslot_,void (BankProcess_:: *fnc_)(void),BankProcess_ *bp_,Bank *bank_,int *nselected_)} {} {
  54.     code {nslot=nslot_;
  55. what=what_;
  56. whatslot=whatslot_;
  57. fnc=fnc_;
  58. bp=bp_;
  59. bank=bank_;
  60. nselected=nselected_;
  61. box(FL_THIN_UP_BOX);
  62. align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP);
  63.  
  64. highlight=0;
  65. refresh();} {}
  66.   }
  67.   Function {refresh()} {} {
  68.     code {if (bank->emptyslot(nslot)) {
  69.     color(46);
  70. } else {
  71.     if (bank->isPADsynth_used(nslot)) color(26);
  72.         else color(51);
  73. };
  74.  
  75. if (*nselected==nslot) color(6);
  76.  
  77.  
  78. label(bank->getnamenumbered(nslot));} {}
  79.   }
  80.   decl {int *what,*whatslot,nslot,highlight, *nselected;} {}
  81.   decl {void (BankProcess_:: *fnc)(void);} {}
  82.   decl {BankProcess_ *bp;} {}
  83.  
  84. class BankUI {: {public BankProcess_}
  85. } {
  86.   Function {make_window()} {} {
  87.     Fl_Window bankuiwindow {
  88.       label Bank
  89.       xywh {4 64 785 575} type Double hide
  90.       code0 {o->label(bank->bankfiletitle);}
  91.       code1 {if (bank->bankfiletitle==NULL) o->label ("Choose a bank from the bank list on the left (or go to settings if to configure the bank location) or choose 'New Bank...' to make a new bank.");}
  92.     } {
  93.       Fl_Button {} {
  94.         label Close
  95.         callback {bankuiwindow->hide();}
  96.         xywh {705 546 70 24} box THIN_UP_BOX
  97.       }
  98.       Fl_Group {} {
  99.         xywh {5 34 772 491} box ENGRAVED_FRAME
  100.       } {
  101.         Fl_Pack {} {
  102.           xywh {10 39 150 481} box BORDER_BOX
  103.           code0 {o->box(FL_NO_BOX);}
  104.           code1 {for (int i=0;i<32;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};}
  105.         } {}
  106.         Fl_Pack {} {
  107.           xywh {163 39 150 481} box BORDER_BOX
  108.           code0 {o->box(FL_NO_BOX);}
  109.           code1 {for (int i=32;i<64;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};}
  110.         } {}
  111.         Fl_Pack {} {
  112.           xywh {316 39 150 481} box BORDER_BOX
  113.           code0 {o->box(FL_NO_BOX);}
  114.           code1 {for (int i=64;i<96;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};}
  115.         } {}
  116.         Fl_Pack {} {
  117.           xywh {469 39 150 481} box BORDER_BOX
  118.           code0 {o->box(FL_NO_BOX);}
  119.           code1 {for (int i=96;i<128;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};}
  120.         } {}
  121.         Fl_Pack {} {
  122.           xywh {622 39 150 481} box BORDER_BOX
  123.           code0 {o->box(FL_NO_BOX);}
  124.           code1 {for (int i=128;i<160;i++){bs[i]=new BankSlot (0,0,o->w(),15," ");bs[i]->init(i,&what,&slot,&BankProcess_::process,(BankProcess_ *)this,bank,&nselected);};}
  125.         } {}
  126.       }
  127.       Fl_Group modeselect {
  128.         xywh {5 528 425 42} box ENGRAVED_BOX
  129.       } {
  130.         Fl_Light_Button writebutton {
  131.           label WRITE
  132.           callback {if (o->value()>0.5) mode=2;
  133. removeselection();}
  134.           xywh {116 534 99 30} type Radio box PLASTIC_UP_BOX down_box THIN_DOWN_BOX selection_color 1 labeltype ENGRAVED_LABEL labelfont 1 labelsize 18
  135.           code0 {if (bank->locked()) o->deactivate();}
  136.         }
  137.         Fl_Light_Button readbutton {
  138.           label READ
  139.           callback {if (o->value()>0.5) mode=1;
  140. removeselection();}
  141.           xywh {11 534 99 30} type Radio box PLASTIC_UP_BOX down_box THIN_DOWN_BOX selection_color 101 labeltype ENGRAVED_LABEL labelfont 1 labelsize 18
  142.           code0 {o->value(1);}
  143.         }
  144.         Fl_Light_Button clearbutton {
  145.           label CLEAR
  146.           callback {if (o->value()>0.5) mode=3;
  147. removeselection();}
  148.           xywh {221 534 99 30} type Radio box PLASTIC_UP_BOX down_box THIN_DOWN_BOX selection_color 0 labeltype ENGRAVED_LABEL labelfont 1 labelsize 18
  149.           code0 {if (bank->locked()) o->deactivate();}
  150.         }
  151.         Fl_Light_Button swapbutton {
  152.           label SWAP
  153.           callback {if (o->value()>0.5) mode=4;
  154. removeselection();}
  155.           xywh {325 534 99 30} type Radio box PLASTIC_UP_BOX down_box THIN_DOWN_BOX selection_color 227 labeltype ENGRAVED_LABEL labelfont 1 labelsize 18
  156.           code0 {if (bank->locked()) o->deactivate();}
  157.         }
  158.       }
  159.       Fl_Button {} {
  160.         label {New Bank...}
  161.         callback {const char *dirname;
  162.  
  163. dirname=fl_input("New empty Bank:");
  164. if (dirname==NULL) return;
  165.  
  166.  
  167. int result=bank->newbank(dirname);
  168.  
  169. if (result!=0) fl_alert("Error: Could not make a new bank (directory)..");
  170.  
  171. refreshmainwindow();}
  172.         xywh {685 5 93 25} box PLASTIC_UP_BOX labelfont 1 labelsize 12 align 128
  173.       }
  174.       Fl_Check_Button {} {
  175.         label {auto close}
  176.         callback {config.cfg.BankUIAutoClose=(int) o->value();}
  177.         tooltip {automatically close the bank window if the instrument is loaded} xywh {705 529 60 15} down_box DOWN_BOX labelsize 10
  178.         code0 {o->value(config.cfg.BankUIAutoClose);}
  179.       }
  180.       Fl_Choice banklist {
  181.         callback {int n=o->value();
  182. char *dirname=bank->banks[n].dir;
  183. if (dirname==NULL) return;
  184.  
  185. if (bank->loadbank(dirname)==2)
  186.        fl_alert("Error: Could not load the bank from the directory\\n%s.",dirname);
  187. for (int i=0;i<BANK_SIZE;i++) bs[i]->refresh();
  188. refreshmainwindow();} open
  189.         xywh {5 8 220 20} down_box BORDER_BOX labelfont 1 align 0 textfont 1 textsize 12
  190.       } {}
  191.       Fl_Button {} {
  192.         label {Refresh bank list}
  193.         callback {rescan_for_banks();
  194. banklist->value(0);}
  195.         tooltip {Refresh the bank list (rescan)} xywh {230 8 105 20} box THIN_UP_BOX color 50 labelsize 12
  196.       }
  197.       Fl_Check_Button {} {
  198.         label {Show PADsynth status}
  199.         callback {config.cfg.CheckPADsynth=(int) o->value();
  200. refreshmainwindow();}
  201.         xywh {435 530 150 15} down_box DOWN_BOX labelsize 12
  202.         code0 {o->value(config.cfg.CheckPADsynth);}
  203.       }
  204.     }
  205.   }
  206.   Function {BankUI(Master *master_,int *npart_)} {} {
  207.     code {fnc=&BankProcess_::process;
  208. master=master_;
  209. npart=npart_;
  210. bank=&master_->bank;
  211. what=0;
  212. nselected=-1;
  213. make_window();
  214. mode=1;} {}
  215.   }
  216.   Function {~BankUI()} {return_type virtual
  217.   } {
  218.     code {bankuiwindow->hide();
  219. delete(bankuiwindow);} {}
  220.   }
  221.   Function {show()} {} {
  222.     code {bankuiwindow->show();
  223. simplesetmode(config.cfg.UserInterfaceMode==2);} {}
  224.   }
  225.   Function {hide()} {} {
  226.     code {bankuiwindow->hide();} {}
  227.   }
  228.   Function {init(Fl_Valuator *cbwig_)} {} {
  229.     code {cbwig=cbwig_;
  230. rescan_for_banks();} {}
  231.   }
  232.   Function {process()} {return_type void
  233.   } {
  234.     code {int slot=this->slot;
  235.  
  236. if ((what==2)&&(bank->emptyslot(slot)==0)&&(mode!=4)) {//Rename slot
  237.     const char *tmp=fl_input("Slot (instrument) name:",(const char *)bank->getname(slot));
  238.     if (tmp!=NULL) bank->setname(slot,tmp,-1);
  239.     bs[slot]->refresh();
  240. };
  241.  
  242. if ((what==1)&&(mode==1)&&(!bank->emptyslot(slot))){//Reads from slot
  243.     pthread_mutex_lock(&master->mutex);
  244.      bank->loadfromslot(slot,master->part[*npart]);
  245.     pthread_mutex_unlock(&master->mutex);
  246.     master->part[*npart]->applyparameters();
  247.     snprintf((char *)master->part[*npart]->Pname,PART_MAX_NAME_LEN,"%s",bank->getname(slot));
  248.      cbwig->do_callback();
  249.      
  250.      if (config.cfg.BankUIAutoClose!=0)
  251.          bankuiwindow->hide();
  252.  
  253. };
  254.  
  255. if ((what==1)&&(mode==2)){//save(write) to slot
  256.      if (!bank->emptyslot(slot)){
  257.        if (!fl_ask("Overwrite the slot no. %d ?",slot+1)) goto nooverwriteslot;
  258.       };
  259.        pthread_mutex_lock(&master->mutex);
  260.         bank->savetoslot(slot,master->part[*npart]);
  261.        pthread_mutex_unlock(&master->mutex);
  262.  
  263.        bs[slot]->refresh();
  264.        mode=1;readbutton->value(1);writebutton->value(0);
  265.        nooverwriteslot:;
  266. };
  267.  
  268.  
  269.  
  270. if ((what==1)&&(mode==3)&&(!bank->emptyslot(slot))){//Clears the slot
  271.       if (fl_ask("Clear the slot no. %d ?",slot+1)){
  272.           bank->clearslot(slot);
  273.           bs[slot]->refresh();
  274.       };
  275. };
  276.  
  277. if (mode==4){//swap
  278.     bool done=false;
  279.     if ((what==1)&&(nselected>=0)){
  280.          bank->swapslot(nselected,slot);
  281.          int ns=nselected;
  282.          nselected=-1;
  283.          bs[slot]->refresh();
  284.          bs[ns]->refresh();
  285.          done=true;
  286.     };
  287.     if (((nselected<0)||(what==2))&&(!done)){
  288.         int ns=nselected;
  289.         nselected=slot;
  290.         if (ns>0) bs[ns]->refresh();
  291.         bs[slot]->refresh();
  292.     };
  293. };
  294. if (mode!=4) refreshmainwindow();} {selected
  295.     }
  296.   }
  297.   Function {refreshmainwindow()} {} {
  298.     code {bankuiwindow->label(bank->bankfiletitle);
  299. mode=1;readbutton->value(1);writebutton->value(0);clearbutton->value(0);swapbutton->value(0);
  300. nselected=-1;
  301. if (bank->locked()){
  302.     writebutton->deactivate();
  303.     clearbutton->deactivate();
  304.     swapbutton->deactivate();
  305. } else {
  306.     writebutton->activate();
  307.     clearbutton->activate();
  308.     swapbutton->activate();
  309. };
  310. for (int i=0;i<BANK_SIZE;i++) bs[i]->refresh();} {}
  311.   }
  312.   Function {removeselection()} {} {
  313.     code {if (nselected>=0) {
  314.    int ns=nselected;
  315.    nselected=-1;
  316.    bs[ns]->refresh();
  317. };} {}
  318.   }
  319.   Function {rescan_for_banks()} {} {
  320.     code {banklist->clear();
  321. banklist->add(" ");
  322. bank->rescanforbanks();
  323.  
  324. for (int i=1;i<MAX_NUM_BANKS;i++) {
  325.     if (bank->banks[i].name!=NULL) banklist->add(bank->banks[i].name);
  326. };} {}
  327.   }
  328.   Function {simplesetmode(bool beginnerui)} {} {
  329.     code {readbutton->value(1);
  330. mode=1;
  331. removeselection();
  332. if (beginnerui) modeselect->hide();
  333.     else modeselect->show();} {}
  334.   }
  335.   decl {BankSlot *bs[BANK_SIZE];} {}
  336.   decl {int slot,what;//"what"=what button is pressed} {}
  337.   decl {int mode,*npart,nselected;} {}
  338.   decl {Master *master;} {}
  339.   decl {void (BankProcess_::* fnc)(void);} {}
  340.   decl {Fl_Valuator *cbwig;} {public
  341.   }
  342.